#pragma once

#include <memory>


namespace vortex
{
    struct TrtInferDeleter
    {
        template<typename T>
        void operator()(T* obj)
        {
            if (obj) obj->destroy();
        }
    };

    template<typename T>
    // using TrtUniquePtr = std::unique_ptr<T, TrtInferDeleter>;
    using TrtUniquePtr = std::unique_ptr<T>;

    template<typename T>
    // using TrtSharedPtr = std::shared_ptr<T, TrtInferDeleter>;
    using TrtSharedPtr = std::shared_ptr<T>;

    // 通过智能指针管理nv返回的指针参数
    // 内存自动释放，避免泄漏
    template<typename _T>
    std::shared_ptr<_T> make_nvshared(_T* ptr){
        return std::shared_ptr<_T>(ptr, [](_T* p){p->destroy();});
    }

}
